/**
 * @author Vitor Franco do Carmo (vitor.carmo@cpmbraxis.com)
 * @since 30/07/2013
 *
 */
package br.com.vfcfw.commons.exception;

import java.util.ArrayList;
import java.util.List;


/**
 * Excepção para tratar erros de negócio.
 * 
 * @author Vitor Franco do Carmo (vitor.carmo@cpmbraxis.com)
 * @since 30/07/2013
 * 
 */
@javax.ejb.ApplicationException(rollback = true)
public class BusinessException extends ApplicationException {

    /** */
    private static final long serialVersionUID = -5537731350379007247L;

    private List<String> listaErros = new ArrayList<String>();

    /**
     * Construtor da classe.
     */
    public BusinessException() {

        super();
    }

    /**
     * Construtor da classe.
     * 
     * @param listaErros Lista de erros.
     */
    public BusinessException(List<String> listaErros) {

        super();
        this.listaErros = listaErros;
    }

    /**
     * Construtor da classe.
     * 
     * @param mensagem Mensagem de erro. Mensagem de erro.
     * @param causa Causa do erro. Causa do erro.
     */
    public BusinessException(String mensagem, Throwable causa) {

        super(mensagem, causa);
        getListaErros().add(mensagem);
    }

    /**
     * Construtor da classe.
     * 
     * @param mensagem Mensagem de erro.
     */
    public BusinessException(String mensagem) {

        super(mensagem);
        getListaErros().add(mensagem);
    }

    /**
     * Construtor da classe.
     * 
     * @param causa Causa do erro.
     */
    public BusinessException(Throwable causa) {

        super(causa.getMessage(), causa);

        if (causa instanceof BusinessException) {
            this.listaErros.addAll(((BusinessException) causa).getListaErros());
        } else {
            this.listaErros.add(causa.getMessage());
        }
    }

    /**
     * Retorna o valor do atributo listaErros.
     * 
     * @return Valor do atributo listaErros.
     */
    public List<String> getListaErros() {

        return listaErros;
    }

}
